package redisclient

import (
	"errors"
	"fmt"
	"go.uber.org/zap"
)

type Header struct {
	BrandName string // 服务所属品牌名称
	BrandCode string // 服务所属品牌的唯一ID
	Region    string // 服务所在区域信息
	Server    string // 请求服务名称
}

type Service struct {
	Addr            string // 当前区域 Redis 中间件服务地址，host:port
	RpcRegisterName string // Redis 中间件服务 rpc 注册名称，固定 "RedisHandler"
	Encrypt         string // 请求是否开启 AES 加密，on-开启/off-不开启
	Secret          string // Redis 中间件服务请求 AES 加密秘钥
}

type RedisClient struct {
	RequestId   string
	Region      string // 指定查询区域, cn/us/eu/all，all-查询所有区域
	Header      *Header
	Service     *Service
	AllResponse map[string]Response // 多区域响应数据
	Logger      *zap.Logger
}

func InitConfig(h *Header, s *Service) (*RedisClient, error) {
	// 1. 验证并设置头部信息
	if h.BrandName == "" || h.BrandCode == "" || h.Region == "" || h.Server == "" {
		return nil, errors.New("redisClient has a default Header configuration that is empty")
	}
	// 2. 验证并设置 Mysql 中间件服务信息
	if s.Addr == "" || s.RpcRegisterName == "" || s.Encrypt == "" || s.Secret == "" {
		return nil, errors.New("redisService link information is incomplete")
	}
	return &RedisClient{Header: h, Service: s}, nil
}

func (c *RedisClient) Debug(msg string, fields ...zap.Field) {
	if c.Logger == nil {
		fmt.Println(msg, fields)
		return
	}
	c.Logger.Debug(msg, fields...)
}

func (c *RedisClient) Error(msg string, fields ...zap.Field) {
	if c.Logger == nil {
		fmt.Println(msg, fields)
		return
	}
	c.Logger.Error(msg, fields...)
}
